node.js 中间件 multer 问题记录

您所在的位置:网站首页 javascript 判断文件大小 node.js 中间件 multer 问题记录

node.js 中间件 multer 问题记录

2023-06-02 22:11| 来源: 网络整理| 查看: 265

        背景:使用multer中间件存储上传文件到本地,自定义本地储存文件名为上传文件,因此对当前文件夹是否有重复文件名进行了判断,然后就出现上传会提示文件名重复,但后续操作都会卡住的问题

        请教问题出在哪里?

现象:

        1.上传文件,此时本地已有相同文件名文件,因此返回文件名重复

         2.后续操作卡住,但服务器未崩溃,只是当前连接卡住

         3.问题是为什么只有判断文件名是否重复的部分导致当前连接卡住,但判断文件大小和类型则不会

         4. 代码如下

const upload = (req,res,next) => { const fullpath = path.join(__dirname,'../../',"/resources/static/upload/",tool.getDate().split(' ')[0]) const storage = multer.diskStorage({ destination: fullpath, filename:(req,file,cb)=>{ //解决中文乱码 file.originalname = Buffer.from(file.originalname,'latin1').toString('utf-8') cb(null,file.originalname) } }) const upFile = multer({storage,fileFilter(req,file,cb){ const size = parseInt(req.headers["content-length"]) var type = file.mimetype var filename = Buffer.from(file.originalname,'latin1').toString('utf-8') var tname = path.join(fullpath,filename) // 此处判断本地文件夹是否有相同文件名文件 if(fs.existsSync(tname)) { var mulErr = new multer.MulterError() mulErr.message = '文件名重复' return cb(mulErr,false) } var index = filename.lastIndexOf('.') var suffixName = filename.slice(index) const regPdf = /.(ppt|pptx|pdf)$/ const regDoc = /.(doc|docx)$/ if(type.match('image')) { if(size>1024*1024*10) { var mulErr = new multer.MulterError() mulErr.message = '单张图片大小不得超过10M' return cb(mulErr,false) } return cb(null,true) } else if(type.match('video')) { if(size>1024*1024*1024*2) { var mulErr = new multer.MulterError() mulErr.message = '视频大小不得超过2G' return cb(mulErr,false) } return cb(null,true) } else if(regDoc.test(suffixName)) { if(size>1024*60) { var mulErr = new multer.MulterError() mulErr.message = '单份文档大小不得超过60k' return cb(mulErr,false) }else{ return cb(null,true) } } else if(regPdf.test(suffixName)) { if(size>1024*1024*20) { var mulErr = new multer.MulterError() mulErr.message = '简报大小不得超过20M' return cb(mulErr,false) } return cb(null,true) }else { var mulErr = new multer.MulterError() mulErr.message = '不接受该格式文件!' return cb(mulErr,false) } }.single("file") upFile(req,res,(err)=>{ if(err) { return next(err) }else { res.status(200).send({ time:tool.getDate(), info:{ 'filename':req.file.filename, 'path':req.file.path }, msg:req.file.filename+'文件上传成功' }) } }) }



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3